<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <script>
      class PromiseA {
        constructor(executor) {
          this.status = "pending";
          var resolve = (val) => {
            if (this.status === "pending") {
              this.status = "fulfilled";
              this.resolveCallback(val);
            }
          };
          var reject = (val) => {
            if (this.status === "pending") {
              this.status = "rejected";
              this.rejectCallback(val);
            }
          };
          executor(resolve, reject);
        }
        then(onFulfill, onReject) {
          this.resolveCallback = onFulfill;
          this.rejectCallback = onReject;
        }
      }

      const p = new PromiseA((resolve, reject) => {
        setTimeout(()=>{
          resolve(100);
        })
      });

      p.then((res) => {
        console.log(res);
      });
    </script>
  </body>
</html>
